/*
 * $Id: FormatterFactory.java 37 2012-12-28 09:15:03Z vladimirow@mail.ru $
 * $HeadURL: http://ultralog.googlecode.com/svn/ultralog/tags/release-0.1/src/java/com/google/code/ultralog/formatter/FormatterFactory.java $
 *
 * This file is a part of ultralog project (http://code.google.com/p/ultralog/).
 * Released under New BSD License.
 */
package com.google.code.ultralog.formatter;

/**
 * Factory that creates formatters of various types.
 *
 * @author Mikhail Vladimirov
 */
public interface FormatterFactory
{
    /**
     * Create boolean formatter with given options.
     *
     * @param options formatter options
     * @return boolean formatter
     */
    public BooleanFormatter createBooleanFormatter (String options);

    /**
     * Create byte formatter with given options.
     *
     * @param options formatter options
     * @return byte formatter
     */
    public ByteFormatter createByteFormatter (String options);

    /**
     * Create short formatter with given options.
     *
     * @param options formatter options
     * @return short formatter
     */
    public ShortFormatter createShortFormatter (String options);

    /**
     * Create character formatter with given options.
     *
     * @param options formatter options
     * @return character formatter
     */
    public CharacterFormatter createCharacterFormatter (String options);

    /**
     * Create integer formatter with given options.
     *
     * @param options formatter options
     * @return integer formatter
     */
    public IntegerFormatter createIntegerFormatter (String options);

    /**
     * Create long formatter with given options.
     *
     * @param options formatter options
     * @return long formatter
     */
    public LongFormatter createLongFormatter (String options);

    /**
     * Create float formatter with given options.
     *
     * @param options formatter options
     * @return float formatter
     */
    public FloatFormatter createFloatFormatter (String options);

    /**
     * Create double formatter with given options.
     *
     * @param options formatter options
     * @return double formatter
     */
    public DoubleFormatter createDoubleFormatter (String options);

    /**
     * Create reference formatter with given type of values and options.
     *
     * @param <T> type of values
     * @param type type of values class object
     * @param options formatter options
     * @return reference formatter
     */
    public <T> ReferenceFormatter <? super T> createReferenceFormatter (
        Class <T> type, String options);
}
